Serial linkage of subsystems is at the heart of the architecture of the latest generation of two-way radios. The radios are constructed by interconnecting independent radio subsystems comprising individual processors over a bi-directional serial link. The undedicated multiple processors all communicating on the same serial link or bus, provide flexibility for radio design.
However, when two or more processors are present in such a system, where a common communication path (such as a bus, a disk or a multiplicity of lines) is used in which the processors communicate, problems arise at power-up or reset, when each processor tries to perform the same operations. Specifically, bus contention is one problem that arises in serially communicated information between radio subsystems or processors in an internally bussed two-way communication device, such as a portable or mobile radio. Bus contention is especially problematic if the processors in the system are all undefined, the same, or undedicated, where each processor can do the same task of a subsystem.
The simplest bus contention solution is simply to do nothing and assume the initialization software for each subsystem task of a processor will take different times to complete, such that the processors would not all be ready at the same time to access the bus. However, when accessing a slotted bus, the approach of doing nothing may not be reliable enough to avoid bus collisions. A slotted bus is one where the processors or transceiving devices addressing the bus must all do so at predetermined time slots, such as in a trunking environment. Therefore, the problem of bus contention is magnified if a slotted bus is used.
Many prior art systems utilize a randomized retry for a bus access after a busy bus condition is sensed, hoping that randomization will reduce the possibility of further collisions. In order to minimize further communications collisions, a random number is generated which causes a delay based on that random number for that processor to wait before retrying to send information on the common communication path. However, generating a random number is sometimes a difficult task, especially when the random number is needed immediately needed after power-up to determine which processor has access to the bus. Since a free running counter in a random number generator may have the same value every time at some point in the software such as during power-up or reset, randomness cannot be obtained. Generation is especially difficult if the processors do not have a EEPROM, any unused ports, or an A-to-D converter to generate the random number. Additionally, randomization would additionally require bus contention randomization overhead.
Therefore, in multiple access bus systems where multiple processors will access the bus, collision avoidance and bus contention must be anticipated and orchestrated.